<?php

namespace app\admin\controller\yihu\nursing;

use app\admin\constant\CompanyConstant;
use app\admin\constant\DisabilityLevelConstant;
use app\admin\constant\TaskConstant;
use app\admin\model\yihu\ElderlyModel;
use app\common\controller\Backend;

/**
 * 任务管理
 *
 * @icon fa fa-circle-o
 */
class Task extends Backend
{

    /**
     * Task模型对象
     * @var \app\admin\model\yihu\nursing\Task
     */
    protected $model = null;

    public function _initialize()
    {
        parent::_initialize();
        $this->model = new \app\admin\model\yihu\nursing\Task;

    }

    /**
     * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
     * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
     * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
     */
    public function index()
    {
        try {
            //设置过滤方法
            $this->request->filter(['strip_tags', 'trim']);
            if (false === $this->request->isAjax()) {
                return $this->view->fetch();
            }
            //如果发送的来源是 Selectpage，则转发到 Selectpage
            if ($this->request->request('keyField')) {
                return $this->selectpage();
            }
            [$where, $sort, $order, $offset, $limit] = $this->buildparams();
            // 手动映射 where 条件中的 elderly_name 到 e.nickname
            foreach ($where as &$condition) {
                if (isset($condition[0]) && $condition[0] == 'elderly_name') {
                    $condition[0] = 'e.nickname'; // 映射到 e.nickname
                }
            }
            // 查询数据库，获取数据列表
            $model = $this->model
                ->alias('t') // 使用表的别名
//                    ->with(['auth_group_company as c','yihu_elderly as e','auth_user as u'])
                ->join('auth_group_company c', 'c.id = t.company_id') // 关联 auth_group_company 表
                ->join('yihu_elderly e', 't.elderly_id = e.id') // 关联 yihu_elderly 表
                ->join('auth_user u', 't.finish_id = u.id') // 关联 auth_user 表
                ->where($where)
                ->where('t.status', TaskConstant::STATUS1) // 仅选择状态为 STATUS1 的任务
                ->where('t.finish_status', TaskConstant::FINISH_STATUS3) // 仅选择完成状态为 FINISH_STATUS3 的任务
                ->where('c.status', TaskConstant::STATUS1) // 仅选择公司状态为 STATUS1 的
                ->where('c.formal', CompanyConstant::FORMAL1) // 仅选择正式的公司
                ->where('c.care_type', CompanyConstant::CARE_TYPE1) // 仅选择照料类型为 CARE_TYPE1 的公司
                ->where('t.elderly_id', '>', 0) // 仅选择绑定了老人 ID 的任务
                ->where('c.id', '<>', 91); // 排除特定公司 ID 91
            $list = $model->field('e.nickname as elderly_name,e.disability_level,e.home_region_id, t.title, FROM_UNIXTIME(t.finish_time, "%Y-%m-%d %H:%i") as finish_time, t.images, c.title as company_name, t.finish_id,u.nickname as username') // 指定要查询的字段，并进行别名映射
                ->order($sort, $order) // 使用前端传递的排序字段和顺序
                ->paginate($limit); // 分页查询
            $items = $this->setImges($list);//设置正确格式的images字段（图片）
            $items = $this->setDisabilityLevel($list, $items);//设置失能等级
            $items = $this->setHomeStreet($list, $items);//设置全路径的家庭住址（到街道）
            $result = ['total' => $list->total(), 'rows' => $items];
            return json($result);
        }catch (\Exception $e){
//            var_dump($e->getMessage());die;
            return json([]);
        }
    }

    /**
     * 设置正确格式的images字段（图片）
     * @param \think\Paginator $list
     * @return array
     */
    public function setImges(\think\Paginator $list): array
    {
// 手动处理 images 字段，提取 URL
        $items = [];
        foreach ($list->items() as $item) {
            $images = json_decode($item['images'], true); // 解析 JSON
            $urls = [];
            if (is_array($images)) {
                foreach ($images as $group) {
                    foreach ($group as $image) {
                        if (isset($image['url'])) {
                            $url = trim($image['url']);  // 去除多余空格
                            // 确保 URL 是完整的
                            if (!preg_match('/^https?:\/\//', $url)) {
                                $url = 'https://' . $url;
                            }
                            $urls[] = $url; // 提取 url
                        }
                    }
                }
            }
            $item['images'] = implode(',', $urls); // 将 URL 连接成字符串
            $items[] = $item;
        }
        return $items;
    }

    /**
     * 设置失能等级
     * @param \think\Paginator $list
     * @param array $items
     * @return array
     */
    public function setDisabilityLevel(\think\Paginator $list, array $items): array
    {
        $items = [];
        foreach ($list->items() as $item) {
            $disability_level = isset($item['disability_level']) && $item['disability_level'] ? $item['disability_level'] : [];
            $item['disability_level_name'] = isset(DisabilityLevelConstant::getMap()[$disability_level]) && DisabilityLevelConstant::getMap()[$disability_level] ?DisabilityLevelConstant::getMap()[$disability_level] : '--';
            $items[] = $item;
        }
        return $items;
    }

    /**
     * 设置全路径的家庭住址（到街道）
     * @param \think\Paginator $list
     * @param array $items
     * @return array
     */
    public function setHomeStreet(\think\Paginator $list, array $items): array
    {
        $items = [];
        foreach ($list->items() as $item) {
            $home_region = isset($item['home_region_id']) && $item['home_region_id'] ? $item['home_region_id'] : [];

            $item['home_street'] = ElderlyModel::getHomeaddressForStreet($home_region);
            $items[] = $item;
        }
        return $items;
    }

}
